// main.qml
// TextEditorPro - 多功能文本编辑器
// 适配到 Qt for HarmonyOS
// 整合了文本编辑、样式控制、查找替换、格式化等功能

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Window 2.15

ApplicationWindow {
    id: root
    width: Screen.width > 0 ? Screen.width : 1200
    height: Screen.height > 0 ? Screen.height : 1000
    visible: true
    title: "多功能文本编辑器"
    flags: Qt.Window | Qt.WindowTitleHint | Qt.WindowSystemMenuHint | Qt.WindowMinMaxButtonsHint | Qt.WindowCloseButtonHint
    
    // 文本样式属性
    property bool textUnderline: false
    property bool textItalic: false
    property bool textBold: false
    
    // 文本颜色属性（0: 黑色, 1: 红色, 2: 蓝色）
    property int textColorIndex: 0
    
    // 颜色映射
    property color textColor: {
        if (textColorIndex === 0) return "black"
        else if (textColorIndex === 1) return "red"
        else return "blue"
    }
    
    // QPlainTextEditDemo 相关属性
    property int rowCount: 0  // 行号计数器
    
    // 文本统计属性
    property int textLength: 0
    property int textLineCount: 0
    property int textWordCount: 0
    
    // 查找替换相关
    property string searchText: ""
    property string replaceText: ""
    
    // 初始化
    Component.onCompleted: {
        console.log("ManualUIDialog: ApplicationWindow onCompleted")
        
        // ⚠️ 关键：确保窗口激活并获得焦点，这样才能接收事件
        console.log("ManualUIDialog: Requesting window activation")
        root.show()
        root.requestActivate()
        console.log("ManualUIDialog: Window active:", root.active)
        
        // 初始化文本统计
        updateTextStats()
    }
    
    // 更新文本统计
    function updateTextStats() {
        var text = textEdit.text
        textLength = text.length
        var lines = text.split("\n")
        textLineCount = lines.length
        var words = text.trim().split(/\s+/).filter(function(word) { return word.length > 0 })
        textWordCount = words.length
        console.log("ManualUIDialog: 文本统计 - 字符:", textLength, "行:", textLineCount, "词:", textWordCount)
    }
    
    // 追加一行文本
    function appendLine() {
        rowCount++
        var newLine = "第" + rowCount + "行"
        textEdit.text = textEdit.text + "\n" + newLine
        updateTextStats()
        console.log("ManualUIDialog: 追加行:", newLine)
    }
    
    // 逐行读取，添加到 ComboBox
    function readLines() {
        lineComboBox.model.clear()
        var lines = textEdit.text.split("\n")
        for (var i = 0; i < lines.length; i++) {
            if (lines[i].trim() !== "") {  // 忽略空行
                lineComboBox.model.append({text: lines[i]})
            }
        }
        console.log("ManualUIDialog: 读取了", lineComboBox.model.count, "行")
    }
    
    // 全部读取，显示对话框
    function readAll() {
        var allText = textEdit.text
        if (allText.trim() === "") {
            allText = "文本区域为空"
        }
        
        // 显示对话框
        readAllDialog.text = allText
        readAllDialog.open()
    }
    
    // 清空文本
    function clearText() {
        textEdit.text = ""
        rowCount = 0
        lineComboBox.model.clear()
        updateTextStats()
        console.log("ManualUIDialog: 文本已清空")
    }
    
    // 查找文本
    function findText() {
        if (searchText.trim() === "") {
            findResultDialog.text = "请输入要查找的文本"
            findResultDialog.open()
            return
        }
        
        var text = textEdit.text
        var index = text.indexOf(searchText)
        if (index >= 0) {
            // 选中找到的文本
            textEdit.select(index, index + searchText.length)
            textEdit.cursorPosition = index + searchText.length
            findResultDialog.text = "找到文本: \"" + searchText + "\"\n位置: " + index
        } else {
            findResultDialog.text = "未找到文本: \"" + searchText + "\""
        }
        findResultDialog.open()
    }
    
    // 替换文本
    function replaceText() {
        if (searchText.trim() === "") {
            findResultDialog.text = "请输入要替换的文本"
            findResultDialog.open()
            return
        }
        
        var text = textEdit.text
        if (text.indexOf(searchText) >= 0) {
            textEdit.text = text.replace(searchText, replaceText)
            updateTextStats()
            findResultDialog.text = "已替换: \"" + searchText + "\" -> \"" + replaceText + "\""
        } else {
            findResultDialog.text = "未找到要替换的文本: \"" + searchText + "\""
        }
        findResultDialog.open()
    }
    
    // 全部替换
    function replaceAll() {
        if (searchText.trim() === "") {
            findResultDialog.text = "请输入要替换的文本"
            findResultDialog.open()
            return
        }
        
        var text = textEdit.text
        var count = 0
        while (text.indexOf(searchText) >= 0) {
            text = text.replace(searchText, replaceText)
            count++
        }
        
        if (count > 0) {
            textEdit.text = text
            updateTextStats()
            findResultDialog.text = "已全部替换 " + count + " 处: \"" + searchText + "\" -> \"" + replaceText + "\""
        } else {
            findResultDialog.text = "未找到要替换的文本: \"" + searchText + "\""
        }
        findResultDialog.open()
    }
    
    // 文本格式化：转大写
    function toUpperCase() {
        textEdit.text = textEdit.text.toUpperCase()
        updateTextStats()
    }
    
    // 文本格式化：转小写
    function toLowerCase() {
        textEdit.text = textEdit.text.toLowerCase()
        updateTextStats()
    }
    
    // 文本格式化：首字母大写
    function toTitleCase() {
        var lines = textEdit.text.split("\n")
        var result = []
        for (var i = 0; i < lines.length; i++) {
            var line = lines[i]
            if (line.length > 0) {
                line = line.charAt(0).toUpperCase() + line.slice(1).toLowerCase()
            }
            result.push(line)
        }
        textEdit.text = result.join("\n")
        updateTextStats()
    }
    
    // 去除首尾空格
    function trimText() {
        var lines = textEdit.text.split("\n")
        var result = []
        for (var i = 0; i < lines.length; i++) {
            result.push(lines[i].trim())
        }
        textEdit.text = result.join("\n")
        updateTextStats()
    }
    
    // 复制文本
    function copyText() {
        if (textEdit.selectedText !== "") {
            // 复制选中的文本
            // 注意：QML 中需要使用 Clipboard
        } else {
            // 复制全部文本
        }
        findResultDialog.text = "文本已复制到剪贴板"
        findResultDialog.open()
    }
    
    // 插入当前时间
    function insertDateTime() {
        var now = new Date()
        var dateStr = now.toLocaleString(Qt.locale("zh_CN"), "yyyy-MM-dd hh:mm:ss")
        textEdit.text = textEdit.text + "\n" + dateStr
        updateTextStats()
    }

    Rectangle {
        id: contentRect
        anchors.fill: parent
        color: "#F5F5F5"
        
        ScrollView {
            anchors.fill: parent
            
            Column {
                width: contentRect.width
                anchors.left: parent.left
                anchors.leftMargin: 80  // 增加左边距
                anchors.right: parent.right
                anchors.rightMargin: 40
                anchors.top: parent.top
                anchors.topMargin: 50
                spacing: 35  // 增加间距
                
                // 标题和统计信息
                Row {
                    width: parent.width
                    spacing: 30
                    
                    Text {
                        text: "多功能文本编辑器"
                        font.pixelSize: 42  // 放大字体
                        font.bold: true
                        color: "#333333"
                    }
                    
                    Rectangle {
                        width: 2
                        height: 40
                        color: "#CCCCCC"
                    }
                    
                    Text {
                        text: "字符: " + textLength + " | 行: " + textLineCount + " | 词: " + textWordCount
                        font.pixelSize: 26  // 放大字体
                        color: "#666666"
                    }
                }
                
                // 第一行：三个复选框（样式控制）
                Row {
                    width: parent.width
                    spacing: 60  // 增加间距
                    
                    CheckBox {
                        id: underlineCheckBox
                        text: "下划线"
                        font.pixelSize: 36  // 放大字体
                        checked: textUnderline
                        
                        // 自定义 indicator 样式，让对号更大更清晰
                        indicator: Rectangle {
                            implicitWidth: 56  // 放大
                            implicitHeight: 56  // 放大
                            x: underlineCheckBox.leftPadding
                            y: parent.height / 2 - height / 2
                            radius: 8
                            border.color: underlineCheckBox.checked ? "#0078D4" : "#999999"
                            border.width: underlineCheckBox.checked ? 4 : 3
                            color: underlineCheckBox.checked ? "#0078D4" : "white"
                            
                            // 对号图标 - 更大更清晰
                            Text {
                                anchors.centerIn: parent
                                text: "✓"
                                color: "white"
                                font.pixelSize: 40  // 放大
                                font.bold: true
                                visible: underlineCheckBox.checked
                            }
                        }
                        
                        onCheckedChanged: {
                            textUnderline = checked
                            console.log("ManualUIDialog: 下划线", checked)
                        }
                    }
                    
                    CheckBox {
                        id: italicCheckBox
                        text: "斜体"
                        font.pixelSize: 36  // 放大字体
                        checked: textItalic
                        
                        indicator: Rectangle {
                            implicitWidth: 56  // 放大
                            implicitHeight: 56  // 放大
                            x: italicCheckBox.leftPadding
                            y: parent.height / 2 - height / 2
                            radius: 8
                            border.color: italicCheckBox.checked ? "#0078D4" : "#999999"
                            border.width: italicCheckBox.checked ? 4 : 3
                            color: italicCheckBox.checked ? "#0078D4" : "white"
                            
                            Text {
                                anchors.centerIn: parent
                                text: "✓"
                                color: "white"
                                font.pixelSize: 40  // 放大
                                font.bold: true
                                visible: italicCheckBox.checked
                            }
                        }
                        
                        onCheckedChanged: {
                            textItalic = checked
                            console.log("ManualUIDialog: 斜体", checked)
                        }
                    }
                    
                    CheckBox {
                        id: boldCheckBox
                        text: "粗体"
                        font.pixelSize: 36  // 放大字体
                        checked: textBold
                        
                        indicator: Rectangle {
                            implicitWidth: 56  // 放大
                            implicitHeight: 56  // 放大
                            x: boldCheckBox.leftPadding
                            y: parent.height / 2 - height / 2
                            radius: 8
                            border.color: boldCheckBox.checked ? "#0078D4" : "#999999"
                            border.width: boldCheckBox.checked ? 4 : 3
                            color: boldCheckBox.checked ? "#0078D4" : "white"
                            
                            Text {
                                anchors.centerIn: parent
                                text: "✓"
                                color: "white"
                                font.pixelSize: 40  // 放大
                                font.bold: true
                                visible: boldCheckBox.checked
                            }
                        }
                        
                        onCheckedChanged: {
                            textBold = checked
                            console.log("ManualUIDialog: 粗体", checked)
                        }
                    }
                }
                
                // 第二行：三个单选按钮（颜色控制）
                Row {
                    width: parent.width
                    spacing: 60  // 增加间距
                    
                    RadioButton {
                        id: blackRadioButton
                        text: "黑色"
                        font.pixelSize: 36  // 放大字体
                        checked: textColorIndex === 0
                        
                        onCheckedChanged: {
                            if (checked) {
                                textColorIndex = 0
                                console.log("ManualUIDialog: 颜色 - 黑色")
                            }
                        }
                    }
                    
                    RadioButton {
                        id: redRadioButton
                        text: "红色"
                        font.pixelSize: 36  // 放大字体
                        checked: textColorIndex === 1
                        
                        onCheckedChanged: {
                            if (checked) {
                                textColorIndex = 1
                                console.log("ManualUIDialog: 颜色 - 红色")
                            }
                        }
                    }
                    
                    RadioButton {
                        id: blueRadioButton
                        text: "蓝色"
                        font.pixelSize: 36  // 放大字体
                        checked: textColorIndex === 2
                        
                        onCheckedChanged: {
                            if (checked) {
                                textColorIndex = 2
                                console.log("ManualUIDialog: 颜色 - 蓝色")
                            }
                        }
                    }
                }
                
                // 文本编辑区域（PlainTextEdit）
                Rectangle {
                    width: parent.width
                    height: 500  // 增加高度
                    color: "white"
                    border.color: "#333333"
                    border.width: 5  // 增加边框宽度
                    radius: 12
                    
                    ScrollView {
                        anchors.fill: parent
                        anchors.margins: 5
                        
                        TextArea {
                            id: textEdit
                            width: parent.width
                            height: Math.max(500, implicitHeight)  // 增加高度
                            placeholderText: "在此输入文本..."
                            text: "Hello world\n\nIt is my demo."
                            font.pixelSize: 38  // 放大字体
                            font.underline: textUnderline
                            font.italic: textItalic
                            font.bold: textBold
                            color: textColor
                            wrapMode: TextArea.Wrap
                            selectByMouse: true
                            padding: 20
                            selectionColor: "#0078D4"
                            selectedTextColor: "white"
                            placeholderTextColor: "#999999"
                            
                            onTextChanged: {
                                updateTextStats()
                            }
                            
                            // 背景样式
                            background: Rectangle {
                                color: "white"
                                border.color: textEdit.activeFocus ? "#0078D4" : "transparent"
                                border.width: 2
                                radius: 8
                            }
                        }
                    }
                }
                
                // 查找替换区域
                Column {
                    width: parent.width
                    spacing: 25  // 增加间距
                    
                    Text {
                        text: "查找和替换："
                        font.pixelSize: 32  // 放大字体
                        font.bold: true
                        color: "#333333"
                    }
                    
                    Row {
                        width: parent.width
                        spacing: 25  // 增加间距
                        
                        Column {
                            spacing: 15  // 增加间距
                            
                            Text {
                                text: "查找："
                                font.pixelSize: 26  // 放大字体
                                color: "#666666"
                            }
                            
                            Rectangle {
                                width: 280  // 增加宽度
                                height: 70  // 增加高度
                                color: "white"
                                border.color: searchInput.activeFocus ? "#0078D4" : "#CCCCCC"
                                border.width: 3  // 增加边框宽度
                                radius: 8
                                
                                TextInput {
                                    id: searchInput
                                    anchors.fill: parent
                                    anchors.margins: 12  // 增加内边距
                                    verticalAlignment: TextInput.AlignVCenter
                                    font.pixelSize: 28  // 放大字体
                                    color: "#333333"
                                    
                                    onTextChanged: {
                                        searchText = text
                                    }
                                }
                            }
                        }
                        
                        Column {
                            spacing: 15  // 增加间距
                            
                            Text {
                                text: "替换为："
                                font.pixelSize: 26  // 放大字体
                                color: "#666666"
                            }
                            
                            Rectangle {
                                width: 280  // 增加宽度
                                height: 70  // 增加高度
                                color: "white"
                                border.color: replaceInput.activeFocus ? "#0078D4" : "#CCCCCC"
                                border.width: 3  // 增加边框宽度
                                radius: 8
                                
                                TextInput {
                                    id: replaceInput
                                    anchors.fill: parent
                                    anchors.margins: 12  // 增加内边距
                                    verticalAlignment: TextInput.AlignVCenter
                                    font.pixelSize: 28  // 放大字体
                                    color: "#333333"
                                    
                                    onTextChanged: {
                                        replaceText = text
                                    }
                                }
                            }
                        }
                        
                        Column {
                            spacing: 15  // 增加间距
                            
                            Text {
                                text: "操作："
                                font.pixelSize: 26  // 放大字体
                                color: "#666666"
                            }
                            
                            Row {
                                spacing: 15  // 增加间距
                                
                                Button {
                                    text: "查找"
                                    width: 120  // 增加宽度
                                    height: 70  // 增加高度
                                    font.pixelSize: 26  // 放大字体
                                    
                                    onClicked: {
                                        findText()
                                    }
                                }
                                
                                Button {
                                    text: "替换"
                                    width: 120  // 增加宽度
                                    height: 70  // 增加高度
                                    font.pixelSize: 26  // 放大字体
                                    
                                    onClicked: {
                                        replaceText()
                                    }
                                }
                                
                                Button {
                                    text: "全部替换"
                                    width: 150  // 增加宽度
                                    height: 70  // 增加高度
                                    font.pixelSize: 26  // 放大字体
                                    
                                    onClicked: {
                                        replaceAll()
                                    }
                                }
                            }
                        }
                    }
                }
                
                // QPlainTextEditDemo 功能区域
                Column {
                    width: parent.width
                    spacing: 25  // 增加间距
                    
                    Text {
                        text: "文本操作："
                        font.pixelSize: 32  // 放大字体
                        font.bold: true
                        color: "#333333"
                    }
                    
                    Row {
                        width: parent.width
                        spacing: 25  // 增加间距
                        
                        Button {
                            text: "追加一行"
                            width: 180  // 增加宽度
                            height: 80  // 增加高度
                            font.pixelSize: 28  // 放大字体
                            
                            onClicked: {
                                appendLine()
                            }
                        }
                        
                        Button {
                            text: "逐行读取"
                            width: 180  // 增加宽度
                            height: 80  // 增加高度
                            font.pixelSize: 28  // 放大字体
                            
                            onClicked: {
                                readLines()
                            }
                        }
                        
                        ComboBox {
                            id: lineComboBox
                            width: 280  // 增加宽度
                            height: 80  // 增加高度
                            font.pixelSize: 26  // 放大字体
                            
                            model: ListModel {
                                id: lineModel
                            }
                            
                            delegate: ItemDelegate {
                                width: lineComboBox.width
                                text: model.text
                                font.pixelSize: 26  // 放大字体
                            }
                        }
                        
                        Button {
                            text: "全部读取"
                            width: 180  // 增加宽度
                            height: 80  // 增加高度
                            font.pixelSize: 28  // 放大字体
                            
                            onClicked: {
                                readAll()
                            }
                        }
                        
                        Button {
                            text: "清空"
                            width: 150  // 增加宽度
                            height: 80  // 增加高度
                            font.pixelSize: 28  // 放大字体
                            
                            onClicked: {
                                clearText()
                            }
                        }
                    }
                }
                
                // 文本格式化功能区域
                Column {
                    width: parent.width
                    spacing: 25  // 增加间距
                    
                    Text {
                        text: "文本格式化："
                        font.pixelSize: 32  // 放大字体
                        font.bold: true
                        color: "#333333"
                    }
                    
                    Row {
                        width: parent.width
                        spacing: 25  // 增加间距
                        
                        Button {
                            text: "转大写"
                            width: 170  // 增加宽度
                            height: 80  // 增加高度
                            font.pixelSize: 28  // 放大字体
                            
                            onClicked: {
                                toUpperCase()
                            }
                        }
                        
                        Button {
                            text: "转小写"
                            width: 170  // 增加宽度
                            height: 80  // 增加高度
                            font.pixelSize: 28  // 放大字体
                            
                            onClicked: {
                                toLowerCase()
                            }
                        }
                        
                        Button {
                            text: "首字母大写"
                            width: 210  // 增加宽度
                            height: 80  // 增加高度
                            font.pixelSize: 28  // 放大字体
                            
                            onClicked: {
                                toTitleCase()
                            }
                        }
                        
                        Button {
                            text: "去除空格"
                            width: 180  // 增加宽度
                            height: 80  // 增加高度
                            font.pixelSize: 28  // 放大字体
                            
                            onClicked: {
                                trimText()
                            }
                        }
                        
                        Button {
                            text: "插入时间"
                            width: 180  // 增加宽度
                            height: 80  // 增加高度
                            font.pixelSize: 28  // 放大字体
                            
                            onClicked: {
                                insertDateTime()
                            }
                        }
                    }
                }
                
                // 第三行：三个按钮
                Row {
                    width: parent.width
                    spacing: 50  // 增加间距
                    anchors.horizontalCenter: parent.horizontalCenter
                    
                    Button {
                        text: "确定"
                        width: 180  // 增加宽度
                        height: 85  // 增加高度
                        font.pixelSize: 32  // 放大字体
                        
                        onClicked: {
                            console.log("ManualUIDialog: 确定按钮被点击")
                            // 对应原始项目的 accept()
                            // 可以在这里添加确定逻辑
                        }
                    }
                    
                    Button {
                        text: "取消"
                        width: 180  // 增加宽度
                        height: 85  // 增加高度
                        font.pixelSize: 32  // 放大字体
                        
                        onClicked: {
                            console.log("ManualUIDialog: 取消按钮被点击")
                            // 对应原始项目的 reject()
                            // 可以在这里添加取消逻辑
                        }
                    }
                    
                    Button {
                        text: "退出"
                        width: 180  // 增加宽度
                        height: 85  // 增加高度
                        font.pixelSize: 32  // 放大字体
                        
                        onClicked: {
                            console.log("ManualUIDialog: 退出按钮被点击")
                            Qt.quit()
                        }
                    }
                }
            }
        }
    }
    
    // 全部读取对话框
    Dialog {
        id: readAllDialog
        x: (root.width - width) / 2
        y: (root.height - height) / 2
        width: Math.min(root.width - 100, 600)
        height: Math.min(root.height - 100, 500)
        modal: true
        title: "文本内容"
        
        property string text: ""
        
        background: Rectangle {
            color: "white"
            radius: 15
            border.color: "#CCCCCC"
            border.width: 2
        }
        
        contentItem: ScrollView {
            width: readAllDialog.width - 40
            height: readAllDialog.height - 120
            
            TextArea {
                id: dialogTextArea
                width: parent.width
                readOnly: true
                text: readAllDialog.text
                font.pixelSize: 24
                wrapMode: TextArea.Wrap
                selectByMouse: true
                
                background: Rectangle {
                    color: "#F9F9F9"
                    border.color: "#CCCCCC"
                    border.width: 1
                    radius: 5
                }
            }
        }
        
        footer: DialogButtonBox {
            Button {
                text: "确定"
                DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole
                font.pixelSize: 22
                width: 100
                height: 50
                
                onClicked: {
                    clearText()
                    readAllDialog.close()
                }
            }
            
            Button {
                text: "取消"
                DialogButtonBox.buttonRole: DialogButtonBox.RejectRole
                font.pixelSize: 22
                width: 100
                height: 50
                
                onClicked: {
                    readAllDialog.close()
                }
            }
        }
    }
    
    // 查找结果对话框
    Dialog {
        id: findResultDialog
        x: (root.width - width) / 2
        y: (root.height - height) / 2
        width: Math.min(root.width - 100, 500)
        height: 200
        modal: true
        title: "操作结果"
        
        property string text: ""
        
        background: Rectangle {
            color: "white"
            radius: 15
            border.color: "#CCCCCC"
            border.width: 2
        }
        
        contentItem: Text {
            text: findResultDialog.text
            font.pixelSize: 22
            wrapMode: Text.Wrap
            color: "#333333"
        }
        
        footer: DialogButtonBox {
            Button {
                text: "确定"
                DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole
                font.pixelSize: 22
                width: 100
                height: 50
                
                onClicked: {
                    findResultDialog.close()
                }
            }
        }
    }
}
